package org.onvivals.module.pms.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.onvivals.common.base.BaseEntity;
import org.onvivals.module.ums.entity.UmsUser;
import org.onvivals.module.ums.param.UmsMemberParam;

import java.io.Serial;
import java.math.BigDecimal;
import java.util.List;

/**
 * 角色配置表
 */
@Schema(description="角色配置表")
@Data
@TableName(value = "pms_role")
public class PmsRole extends BaseEntity<PmsRole> {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    @JsonSerialize(using= ToStringSerializer.class)
    @Schema(description="ID")
    private Long id;

    /**
     * 角色名称
     */
    @TableField(value = "`name`")
    @Schema(description="角色名称")
    private String name;

    /**
     * 开机提示语音，系统自动将 start_text 转成语音文件发送给玩具(必须)
     */
    @TableField(value = "start_text")
    @Schema(description="开机提示语音，系统自动将 start_text 转成语音文件发送给玩具(必须)")
    private String startText;

    /**
     * 开机提示地址
     */
    @TableField(value = "start_url")
    @Schema(description="开机提示地址")
    private String startUrl;

    /**
     * 角色的提示词定义
     */
    @TableField(value = "prompt")
    @Schema(description="角色的提示词定义")
    private String prompt;

    /**
     * 大模型ID
     */
    @TableField(value = "llm_id")
    @Schema(description="大模型ID")
    @JsonSerialize(using= ToStringSerializer.class)
    private Long llmId;

    @TableField(exist = false)
    private String llmName;

    /**
     * 语音合成ID
     */
    @TableField(value = "tts_id")
    @Schema(description="语音合成ID")
    @JsonSerialize(using= ToStringSerializer.class)
    private Long ttsId;

    @TableField(exist = false)
    private String ttsName;

    /**
     * 语音识别ID
     */
    @TableField(value = "stt_id")
    @Schema(description="语音识别ID")
    @JsonSerialize(using= ToStringSerializer.class)
    private Long sttId;

    @TableField(exist = false)
    private String sttName;

    /**
     * 设置为一个大于 0 的数值，比如改成 10，这样表示上下文支持 10 次对话，0 表示不支持上下文。每一个模型都有自己的上下文Token大小的限制，如果超过限制，可以再按一次当前的角色按钮来清空上下文。也可以通过调整 max_message_count 和 max_tokens 的值来大概限制上下文大小。
     */
    @TableField(value = "max_message_count")
    @Schema(description="设置为一个大于 0 的数值，比如改成 10，这样表示上下文支持 10 次对话，0 表示不支持上下文。每一个模型都有自己的上下文Token大小的限制，如果超过限制，可以再按一次当前的角色按钮来清空上下文。也可以通过调整 max_message_count 和 max_tokens 的值来大概限制上下文大小。")
    private Integer maxMessageCount;

	@TableField(value = "price")
	@Schema(description="支付价格")
	private BigDecimal price;

	@TableField(value = "original_price")
	@Schema(description="原价")
	private BigDecimal originalPrice;

	@TableField(value = "img_url")
	@Schema(description="图片地址")
	private String imgUrl;

	@Schema(description="是否支付")
	@TableField(exist = false)
	private Boolean isPay;

	@TableField(value = "is_default")
	private Boolean isDefault;

	@TableField(value = "uid")
	private Long uid;

	@TableField(value = "is_system")
	private Boolean isSystem;

	@TableField(value = "sort")
	private Integer sort;

	@Schema(description="简介")
	private String introduction;

	@Schema(description="图片")
	private String bannerUrl;

	@TableField(exist = false)
	private List<PmsRoleIndividuality> individualityList;

	@TableField(exist = false)
	private String nickName;

	@TableField(exist = false)
	private UmsUser umsUser;

	private String voiceOne;

	private String voiceTwo;

	private String voiceThree;

	private String voiceType;

	@TableField(exist = false)
	private String serialNumber;

}
